package cn.tx.receive;

/**
 * @author Mxb
 * @version 1.0
 * @date 2020/10/12 22:48
 */
////解决死循环
//@Component
//public class MessageReceive4 {
//    @Autowired
//    private StringRedisTemplate redisTemplate;
//    //消息的前缀
//    private String MESSAGE = "message:";
//
//    @RabbitListener(bindings = {
//            @QueueBinding(value = @Queue("queue"),
//                    key = "error",
//                    exchange = @Exchange(value = "directs"))//默认的直连交换机
//    })
//    public void receiveMessage(String content, Message message, Channel channel) throws IOException {
//        System.out.println("============消费者开始================");
//        long deliveryTag = message.getMessageProperties().getDeliveryTag();
//        //消息投递ID
//        System.out.println("消息投递ID:" + deliveryTag);
//        String messageId = message.getMessageProperties().getMessageId();
//        System.out.println("消息自定义ID:" + messageId);
//        if (content.equals("1234568")) {//如果消息内容为123456 就签收它
//            /**
//             * 参数说明:
//             * deliveryTag 消息投递ID，要签收的投递ID 是多少
//             * multiple:是否批量签收
//             */
//            channel.basicAck(deliveryTag, false);
//            System.out.println("消息签收成功");
//        } else {
//            String count = redisTemplate.opsForValue().get(MESSAGE + messageId);
//            if (count != null && Long.valueOf(count) >= 3) {
//                channel.basicNack(deliveryTag, false, false);
//                System.out.println("该消息消费3 失败，我们记录它，人工处理:" + content);
//            } else {
//                //如果不是123456 就拒绝签收
//                /**
//                 * 参数说明:
//                 * deliveryTag 消息投递ID，要签收的投递ID 是多少
//                 * multiple:是否批量签收
//                 * requeue: true 代表拒绝签收并把消息重新放回到队列里面false 就直接拒绝
//                 */
//                //处理业务逻辑的处理[可能逻辑出现问题]
//                channel.basicNack(deliveryTag, false, true);
//                System.out.println("消息被拒绝签收");
//                //因现被拒绝了，我们把消息ID 放到redis 里面
//                redisTemplate.opsForValue().increment(MESSAGE + messageId);
//            }
//        }
//        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//    }
//}
